{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The Perceptron\n",
    "\n",
    "We just employed an optimization method - stochastic gradient descent, without really thinking twice about why it should work at all. It's probably worth while to pause and see whether we can gain some intuition about why this should actually work at all. We start with considering the E. Coli of machine learning algorithms - the Perceptron. After that, we'll give a simple convergence proof for SGD. This chapter is not really needed for practitioners but will help to understand why the algorithms that we use are working at all. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import mxnet as mx\n",
    "from mxnet import nd, autograd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "mx.random.seed(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A Separable Classification Problem\n",
    "\n",
    "The Perceptron algorithm aims to solve the following problem: given some classification problem of data $x \\in \\mathbb{R}^d$ and labels $y \\in \\{\\pm 1\\}$, can we find a linear function $f(x) = w^\\top x + b$ such that $f(x) > 0$ whenever $y = 1$ and $f(x) < 0$ for $y = -1$. Obviously not all classification problems fall into this category but it's a very good baseline for what can be solved easily. It's also the kind of problems computers could solve in the 1960s. The easiest way to ensure that we have such a problem is to fake it by generating such data. We are going to make the problem a bit more interesting by specifying how well the data is separated. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d0379b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# generate fake data that is linearly separable with a margin epsilon given the data\n",
    "def getfake(samples, dimensions, epsilon):\n",
    "    wfake = nd.random_normal(shape=(dimensions))   # fake weight vector for separation\n",
    "    bfake = nd.random_normal(shape=(1))            # fake bias\n",
    "    wfake = wfake / nd.norm(wfake)                 # rescale to unit length\n",
    "\n",
    "    # making some linearly separable data, simply by chosing the labels accordingly\n",
    "    X = nd.zeros(shape=(samples, dimensions))\n",
    "    Y = nd.zeros(shape=(samples))\n",
    "\n",
    "    i = 0\n",
    "    while (i < samples):\n",
    "        tmp = nd.random_normal(shape=(1,dimensions))\n",
    "        margin = nd.dot(tmp, wfake) + bfake\n",
    "        if (nd.norm(tmp).asscalar() < 3) & (abs(margin.asscalar()) > epsilon):\n",
    "            X[i,:] = tmp\n",
    "            Y[i] = 2*(margin > 0) - 1\n",
    "            i += 1\n",
    "    return X, Y\n",
    "\n",
    "# plot the data with colors chosen according to the labels\n",
    "def plotdata(X,Y):\n",
    "    for (x,y) in zip(X,Y):\n",
    "        if (y.asscalar() == 1):\n",
    "            plt.scatter(x[0].asscalar(), x[1].asscalar(), color='r')\n",
    "        else:\n",
    "            plt.scatter(x[0].asscalar(), x[1].asscalar(), color='b')\n",
    "\n",
    "# plot contour plots on a [-3,3] x [-3,3] grid \n",
    "def plotscore(w,d):\n",
    "    xgrid = np.arange(-3, 3, 0.02)\n",
    "    ygrid = np.arange(-3, 3, 0.02)\n",
    "    xx, yy = np.meshgrid(xgrid, ygrid)\n",
    "    zz = nd.zeros(shape=(xgrid.size, ygrid.size, 2))\n",
    "    zz[:,:,0] = nd.array(xx)\n",
    "    zz[:,:,1] = nd.array(yy)\n",
    "    vv = nd.dot(zz,w) + b\n",
    "    CS = plt.contour(xgrid,ygrid,vv.asnumpy())\n",
    "    plt.clabel(CS, inline=1, fontsize=10)\n",
    "            \n",
    "X, Y = getfake(50, 2, 0.3)\n",
    "plotdata(X,Y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we are going to use the simplest possible algorithm to learn parameters. It's inspired by the [Hebbian Learning Rule](https://en.wikipedia.org/wiki/Hebbian_theory) which suggests that positive events should be reinforced and negative ones diminished. The analysis of the algorithm is due to Rosenblatt and we will give a detailed proof of it after illustrating how it works. In a nutshell, after initializing parameters $w = 0$ and $b = 0$ it updates them by $y x$ and $y$ respectively to ensure that they are properly aligned with the data. Let's see how well it works:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Encountered an error and updated parameters\n",
      "data   [ 0.57595438 -0.95017916], label -1.0\n",
      "weight [-0.57595438  0.95017916], bias  -1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n7IqiKKPM/wEFg06Tf701vwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d053470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Encountered an error and updated parameters\n",
      "data   [-0.3469252   0.03751944], label 1.0\n",
      "weight [-0.92287958  0.98769861], bias  0.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d91c7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Encountered an error and updated parameters\n",
      "data   [-1.80471897 -2.04010558], label 1.0\n",
      "weight [-2.72759867 -1.05240703], bias  1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n4guZPtOAcAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10e8205c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Encountered an error and updated parameters\n",
      "data   [ 0.60334933 -1.08074296], label -1.0\n",
      "weight [-3.33094788  0.02833593], bias  0.0\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXl8VOXVx3/PLNkTICRhCwk7CiggCOKuWLXVaq1L1bhU\nrVhbrVr7dqMu1dJqF2tr1UqrVStVrEvdq6hV1IqCFC2LKFvYlwQI2Wfu85z3j1kyhMxMZuZuz+n9\n+sknZhLunOfemXPP/J6zCCKCh4eHhwcffE4b4OHh4eFhLp5j9/Dw8GCG59g9PDw8mOE5dg8PDw9m\neI7dw8PDgxmeY/fw8PBghufYPTw8PJjhOXYPDw8PZniO3cPDw4MZASeetKKigoYNG5bbQVQDAAn4\nBphhkmMY1Ik2Yw+KA+XwizynzcmJHR1NyPMF0C+v2GlTcqIlFMKejnYMKS2DTwinzcmJLQ1NKCsq\nQGlRvtOm5MS+pnZ0tIdQNbCP06bkhBE20LB5N/pWlaGguCDjf//RRx81EFFl2j8kItu/pkyZQrki\nG68gueusnI/jNOubP6C7V82krW0rnDYlZ77y1q/opmXznTYjZx5cuoSG/+7XtLe93WlTciJsSJr8\nzbto7kvvO21Kztz9y5fonC/+xmkzcmbDio10kjiH3pr/Xlb/HsAS6oWP1ViKUYDwO21EziiSAAAf\nOKxFaR/hAoAkBQDw+zR+ewBQKrIOn9B7HQCgJMEX0H8d0oheE7+1a9H4TBkAA2dIiFxoweDNJ0Hw\nc1iHijTG82t+k5LRBn9+n97rAAApFYt1KOk59tSQAgfHHovYBYO1SFI8HHvUIer+6UPGnAgHh6gU\nfJp/ggIAaUTe7/6Ate93jc+UZCHFEKJSDIO1sJFiohJGQHNHomKfPDRfBxCN2C2Ocu1AehF7OhS0\nNj+Kiuq5PgZr4ROxx7RpvW9SnKQYJQk+P4d1eI49DVw09qgUwyBiZ+PYFcEvBITujl3y2AQGImvh\nJcV4jr1niEtWDJ+IXRGxyMDgcoNSsb0CDhE7EY91eBF7OiR4ROyMsmIYOUQOTiS2V8AlYuegsccc\nu9Vr0fhM8XDs8Tx2Bp8+Io6dg0MkHuuISzH6ryWisWvsrqLE89i9rJgkEJesmGjErvGliMFKimEQ\n5XZJMfqvxYvYM0PjM8UjYifiIcUoUiAQfNA/OpSKxycPQ/JI2wRieez6X5PY5qmnsSdFQmvzoyjw\naCmgiFHONBGLdcTy2Fk4RG4RuyfFJIFJ5SkRj3RHI9ZfReOXVAxFPFojcMqKIcVjQ9vLikmLwUJj\n5xOx88nAMBSPClpOUoyUxCJi9/LY08IlYo9EVfpr7NHoUOeXVBRFxCOThFHEzkZj9yL2NDDJiumK\n2PW9FEBCq1sOka7ikY8fy2P3smLcgyfFpMXLinETXY5d73UAEVmJQ8Qu41IMg7Uo4nGDMrzN0zTw\ncOwKUnt9HUhojcDAsRuKEGCwDk557EoqrwlYBuh7xYmHYydS2kfrAL+InYMzlF66o+vwCpTSIgEW\nToRHxB5vEcvgmrBpKcCkrzwQyclncYPyBm2kg0nEDh4RuwKPHuZA5CbFYR2cCpSUZNLmwZNikhNJ\nEeSS7ih5jMVTfKQYqRSLKJddP3YWw6y9PPYUxDJJ9HeICorFhqMEI8fOJGJnNUFJMakt8CL2VMjo\nd/0dO5eIXVkxAHrePGDYMMDni3yfN8+8Y6eAS8SuvDx212FXgVLA0qNbBh/HziZij2fFmHRN5s0D\nZs0C2toiP9fXR34GgLo6c54jCZIU8nyavjUSkJJXxM7hBuVF7KmINs7iUHlKpFhE7KZXns6e3eXU\nY7S1RR63mEgTMP2doWTUv4dLHntcY/d7WTE9oKLf9XeICpJFxN4lxZi0lo0bM3vcRAzFJAODUVYM\nFykmcoOyfh2anikj+l1T8xOIROz6r8P0AqWamsweNxEuEbvBaOYpFylGGsryHHZAV88YdSIspBhI\nFtk9kkzOY58zBygq2v+xoqLI4xYjuXR3VHw0dsmkuyMpez556OnY4xG7/g5REa/NU9N6rNTVAXPn\nArW1gBCR73PnWr5xCsRG4zG4Jszy2DlIMdKwR4rJeetfCDEUwKMABiIifs8lot/letzU8NHYCVzS\nHS1oAlZXZ4sj745k0t1Rccpjl8Ri89Qujd2MnC4DwI1EtFQIUQrgIyHEAiJaacKxe4YYpTuShI+B\nFMNp0IZUxONTFJM89i5JSe91AJGsGKurTgETpBgi2kZES6P/3wxgFYAhuR43NYzSHcFr85RDYY8k\nLgVKPLJi7CrqsQMts2KEEMMATAbwgZnHPRBOEbuGGnsPFaHxzVPo7USAWMSu/zoMJt0dVTy7R/9r\nIqVmWTFCiBIATwO4noj29fD7WUKIJUKIJbt27crtyWJZMQwiXe009lhFaH09QBSvCFUL3wbAY9CG\nF7G7i66pQ/pfEymlPhG7ECKIiFOfR0TP9PQ3RDSXiKYS0dTKysocnzGaFcNAitEuYk9SEWo88TgA\nJk3AmETsXLTprhuU3usANJJihBACwIMAVhHRXbmb1Bs4ZcVoprEnqfxUuxsB8BhmrUixWEd881Tz\ntXQ1M9N7HYB96Y5mPMNRAC4GcKIQYln060smHDc5xCmPXbOsmCSVn7Iq8inMVZ8+suwOaShiIcVI\nRRBCf4cobRonZwfKJo0953RHInoXsHvHjFPlqWYR+5w5+3ddBICiIqhzzwWwxT1STA7dIbWTx5LA\np9AqKsUwyWP3Kk+TwicrhkizlgJJKkLlEdMBuEhjz6E7JJeWAlIp+Dk4Qyb5+EAkj92OSVCaNp3m\nkxWjoOEw6x4qQtWmDwG4SM/NoTskl0iXTeMsblKMF7EnIaaxC03vSwkQ8RhmbXp3x1zJoTskn4id\ntM+IAfikbQL2aeyaXnVGETtpGLH3gOsce5bdIYko2rbXJevIAamY9LyJTYJiELFLQ6M8dvuJZcUw\niNjBI2KPN5wyay25zjvNsjsktwHQrpHGcoCbFKNLEzD7ib75wOBFq0jxaJwVjdiFGdfErHmnWXSH\n7Mr9ZnBNuETsXh57xmj66uUUsWuWFZMEU/uxOzjvNBaxBzg4EUUsolxOEbt2vWLshZPGziNiN3Xm\nqYPzTmMROweNXSke+fgqnsfOYS1exJ4cTlkxTDR2Ge2Rb4pDdHjeKeCitM0ciETsHNbBR4rxHHtK\nOEXsPLJiugZtmPDmc3DeKZdWtwCvfHyAh2PXZtCGM3gau9uQpOCDMGfz1MF5p5widkXEwxky0ti9\nAqVUcOrHTpr1ikmCpG7RoRnpihs2AEpFvts0+zSej88hYmcyAFoxmqAUaSmgQRMwZ+AzGk9Bs+6O\nSVCUMCfUrHRFB5CxHuYMInapiMc6vIg9YzQ9U8widgY6qJHYw9zBdMVcYRWxK8VCiomVrXBYi7d5\nmgrio7Fr2QSsB1SiFONgumKuGIzSHbn0iolH7BzWYnh57CmI9WPX1PwoFK/W1HsdAKCQkDPtYLpi\nrhCrlgJMKk/jGjuPtdjRcVNTj8IjYlfRGxSHAiWZ2DjLwXTFXDGIj8YeyYph8NpipLFLT4pJBQ+N\nvSti11+K2S8rxsF0xVxRjHrFGFKxkC9YDbO2KY9dz5CXeGTFqGh2D4eIPTJOLiHKzaIBlxswGPWK\nUVz6ynsRe8ZoeqZ4jMaj6A2KXcSuMZwidskkYpfcNHbPsSeDh2Pvitj1XgfAx7EbxKmlAI/KU34t\nBbysmB7pinS1ND8Op6wY2V2K0ZRYSwEGS2EjxcQ+RXH49OEVKKVEQtftgURU7Aal62VIgM84uajG\nzmEt7KQYBmsxlC0tBTQ9Uwramp4AwcQe5g4Tidh5rAPgER1yGcrdNfOUw1q8iD05JLXPiAESJCUG\nGju3iJ2FQ1T2FMNYDZesGCICEXmbp8mR0H3jFEgoUOLgEJlsnsYjdg5rkUwqT5nksUsjOozGk2KS\nwcOx84rYlTlDNhxGMtqoi0gx+q+DyzBrO9sP63nVmUgx7CJ2Bk5EcmopkGO6Y64t9c1CGtGbrQ0V\nm1Zi5yawKc8ghHhICLFTCLHcjOOlx4vY3YYkBb+mcUIiMY2dQ+qmVNnfbGMt9evrI21zYy31nXDu\nkokUo+JSjCaOHcDDAE416Vi9gEtWDJ889sigDf2doeKksavss2Lc1FKfixSjXcRORAsB7DbjWL17\nQgOc8tj5VJ7qvw6DUVZMLnnsbmqpzyUrpktSYrR5KoSYJYRYIoRYsmvXrhyPprTvxQ7withl4gQl\njeEUsecyzNpNLfWVJBZ9YkhpFrH3BiKaS0RTiWhqZWVljkfjobHHI3YGka4CsdgEjk1Q4tErJvuI\n3U0t9RWXSVCGfZ889DxbxMOxxyN2TS9DIlLxyGOP9YphsV+QYVZMYhbM7NnApZe6o6W+tKla02rs\nTHfUVKhmku5IjCYogYcUIxmNxsskYo9lwcQ2TOvrgUceccd8FMVkKLd2BUpCiMcBvA9grBBisxDi\nCjOOmxweWTGxtr0c+rErLr1imAyzJqKMsmLclAXTHS9izxxTInYiusCM4/QeHlkxxEhj59NSgEfE\nruLr6N01cVMWTHcim6cMXlsa5rHbCzHLitH0MiQiyWWbp1mWTUomE5QyHU7hpiyY7hx9wkG49BvH\nOW1GzsQidmHDRrCmr14eETunrBhJyj09zHsqm7zoIqCiIq2Dl0wmKGXapdJNWTDdOWzqcHz5q1Oc\nNiNn4vn4XsSeDB4aO6eIndxUedqTYAwAjY1p6+LjDtEta8mSTGe31tVFNkrdkAXDFa8JWDq4NAFj\nFbFL98gXqYThNDuCXNId45vAGTiRujpgwwZAqch3z6mbC8vKU3NR8PLY3YUkck+Um04YTuH4uRQo\ncfnkwQkvYk+LARaOndkwa9dkxfQkGCeSwvErIggAQnOHmE3E7mEtSnoRe2qYZMVwagIWGbThkmsS\nE4z79z/wd2l2BA2ltI/WgcyzYjysJ57u6EXsyWCSFcOhCVg0rVC2tcL/pz85N42hO3V1QEMD8Nhj\nGe0IurXQKtPszZgU48RNyi0DOtyGdgVK9sMlK0bziD2hDl36fPDv2Rv5GXDPzltdXUa2RMbJuSvK\n7ancP91pjkkxdktK2dj6v4J2/dhthwxAaHpPSiAmxWjbUiAhrVD5BHyK3FOHniVubGaWTbl/fPPU\n5na3ZrYmICJQNEuJA3ZOUNLUOxJ0vSclQro3AYtmlxAA5ffBH3UmrqhDzxI3RuzZlPsrh3remNGa\noLMzjE0bGrFl826EwxLFJfkYPXYQKipLzTHSIbyIPS1MsmJ019ij2SUy6gj90Reu7XXoJoq6rkrb\njJJNuX9XVoy9a8m1NcGm+kbcPvtp3HXHi1jy4Tp8unIL3n59JW745sP4071voK210zxjbcbOPHY9\nI3biobFrnxUzZw4waxZUOPJm8yllfx26yaJuLsMprCJ6mveTONKd5q48dnvXko2tiTzy57cxbcYo\nnHH21AN+d9P352PRe5/jxJMnmGStvXh57GnhobFrH7FH0wpVbS0AwF/Wx/46dJP7zbpxxF825f7x\nClqbZaVcWxPk5QcgojaHwxJKEcLhSAAUCPi1Tt/0smLSwixi13XzFADq6mB87Wzg9dvg/9GPgeHH\n2Pv8JvebVcplXSqjxBzj7NmRpcXuW0mzYhwcAJ1hItJ+nHbmZPzlgbew8r+bccjEofAH/Ah1Glj4\n5kr061+CcROqzTXWRrQbtGE/EtrekxLg0lKgq79KL9ZhdpKzyf1mDXJngVJPDStT9TPTtaXA+EOG\n4he/vRBHHTcW27btxbo1O7B7dwsuvuJY/OCmM1E1sI/TJmaNsvFmq6d3JBn5nKc5sdF4ujt2Gf/k\nkeaaWJHknKuo241IxO6+11YqxamnUxfvK+/Cm1Q6SBGmTBuBCYcOhWEolJQWIC8voLUMA3RF7J4U\nkxQuEbuEgE//viTUy426TL1Tb+iuUdTURJx6lsdza0uBTBUnlWE/drewd08rnp7/Ad58dTmEECgo\nDKJpTxsGDOqLS688DocfMdJpE7NG2diPXVPvyEdj11pfjxL75JHWsVs1fy0XUbcbyk195ROoqYl8\nwOnp8Z6Ipzu68CaVinvvehVDa/tj3rPf2e/x9Wt34u47X0ZxcT7GHaKnzu5lxaSDSeUpQWkvwwBd\nU4fSOnY3z1+L4sasGCDzCUfxmac257HnSktLBw6ObpDGPnVIQ2H4yCoUFAYRChlOmpcTdhYoaeod\nvYjdTfR689RkPdwKIpWn7nttZao4xZ2ICzN8UjF1+ki89NxS7Gtqw6gxAxEI+tHeFsJ7C1dDCKF1\n9anyCpTSwUVj5xaxp4kOTdbDrcCNvWJiZKI4xfc9NNPYzz5/OkaNGYDXXv4E/3hqCUIhA6WlBZh4\nWC1+cPMZ6Fde4rSJWeNF7CmI9FchfYt6EiBSLNZRnl+C2w49D4f2rU3/xybq4VZw1ZRp8SlKbmLe\nvMzuh07msefKxMOG4ZBJkdeSEPoPPYlhZx67do4d0Va3HHrFKEh92wkkUBIowKmDJ9n3hJl6uQw4\ncqh79P4Y2WSJxgdtaOYUw2GJt99YiXff+hTbtu6BkoSSsgJMnFyLM86eivL++kbs3uZpSmKOXUPT\nu8ElYreVTCt1GJBN1wQjnhWjl2O//+7X8NGH63D2+dPxy99fhN/cfwlu/PGX4Q/4cOdtz2Hnjian\nTcya3hYomVHDp59XiRbDcMiKUUw0dlsxuTeMDmSTJZoX8KOirAjBgF7vk9WrtuL8S47CIZNq0Kdv\nEcrKClE9tBwXX34s2lo70dqic3fH9AVKZsUtGnqVmP6poendIB2yYtw25yyZN6uvd942i8gmS/SE\nSaPw2p1XoaaqrzVGWUTNsAosfGMldu5oQnt7CO3tIYRCBpYuXgcAKCgMOmxh9iip4POJlHsGZsUt\npnhHIcSpQojVQog1QogfmnHM5MTyWPWKRHpCQUK4WWN3o+yRyps5bZtFZJrD7nZSxQo3/PA0dHYa\nuP6qh3HVxXPx7csfRN1Xfo/5j72P6/7vSxg0uJ9TZueMkiqtvm5aDV9s/FS2X4jsYq4FMAJAHoCP\nAYxL9W+mTJlC2aKMBpLbRpNq+WvWx3ALL22+jR5Z+3WnzUhObS1RxKXv/1Vb65xNjz1GVFTUs11O\n22Yhjz0WWZoQke+PPea0RdnR0+UrKup5PeGwQa0tHfYbaREPfO8ROq3owpR/k+4tB2AJ9cIvmxGx\nTwOwhojWEVEIwBMAzjThuEmIaewujnR7iSKXZ8VY1QIgF2INv5Oh8Vi+VNTVARs2AEpFvrs4YzQl\nvZUaiAiBgB9Fxfnxxxp2NcezfXSkNxG7WZ/OzHDsQwBsSvh5c/Qxi+CT7khweVZMGnFXkkJYGTCU\njBcp2UJdXWSCQwrbMkEqhZCUCEsZ77HiYQ29jRV60qHv/e2raNrbdsDjuiB74dhzHVQSwwyhuqed\ngANuq0KIWQBmAUBNLr1BiI9jd33EnqIFwOa2Rixq+BzrW3ZCkkJRIB9TykdgSvkIFPht2OAyqT1B\n/d69WLhxA9buboRBhJJgENOrh2JG9VAUBPTdqHMrvW1m1lOpwi0/P8ceIy1CGqpXxUlm1PCZES5u\nBjA04edqAFu7/xERzSWiqUQ0tbKyMoeni0kxLo50e4nrI/Yk4cMbMw/FLZ/8HfWtuzCp3zBM6z8K\nI4qr8PiG93D7f5/Cjva9jtmWyTvi5c8/w42vvYz1e3bj8MHVOGpoDUaV98dD//kI31/wKrY277Nw\nAf+bpJMa2lo78dhjFN+zLyxoQEfLCnz3ui3461/1/jTVGynGLMyI2BcDGC2EGA5gC4DzAVxownGT\nEIvY9c+KIUrIY7ewmjIneggfnlvyF1wx8gQcWTl2v8dPr56CGz56BJ81b8OAQhvS7HIMbZ5c8V9c\nM20Gjh82fL/Hzxk3AZc//wxW7dqFwaVluVrpkUC6dkE/uuFxvPzGl9HW1h8D+i/H8Op30dRcjbKS\nbfjtnWNx4QVH29LP3AqkIW2zPednISIDwDUAXgWwCsCTRLQi1+Mmh08eu4pF7G5MK0xBv7wS1Lc2\noN0IoVOGEVIGwtGvDhlG0KfHTbd/URHW7dmNtnAYnYaBTsNASEqEpESnYSDP72KZLAEnSw2yee5U\nG8Ht7SFsqI+0Dagd/AGWrqzDqnWn44NPrkSe/1N0dIYtWIU9KKVXxA4iehnAy2YcK/2T8cmKoZjG\nbsVkIQu5Zswp+PmKZ/HK1mUYUVKFfF8ATeF2rGjahHNrZmByv2FOm9grvn/kMfjxmwvwj9WrMKa8\nP/IDAezt6MCy7dtwycRJmDbE/QMdYjFBe4eBQFE7drW34rqbDDS0FuDKS8pQVJBn+XObOemwrE8h\nRo7YidWfD0XIKIQQkaZ/gEBeHrQej6eksq0pmx6h1X4w2jyFhF/kuTOtMAWVBWX47ZRLsbOjCWua\nt6NThtEnrxjj+5yLfDs2Tk1iQEkJHjzjLGxvacanDQ3oMAyUFxbirpO/iHxNSvFnzwZCaEH10e+j\ndMgmhFpLoEL5ePBfrViwsR0XnjgZ5x47EUELOgpaEY9ce+Op2LzpefhVDdraKzBx7N/RsHcUyvts\nwYxjxiM/X5/XV3fs1Ng11DP4OPZISwGfFpOFutNidGBnxz60yRBCSqJThtEuHfyYnKUe0dzZie0t\nLWgLhxCSBtrDYbSF9fm4v3EjMHj6uwg198HKxy/HmufPw7p/nonl8y/E07dcin+vqMfbn6y17Lkz\nebw31A6vxBPPXYGvXTgQJSUB7Nk3HH3K/LjsqlNx511HaR2xRzR2e/yWfo6dkRQTaQLm165mfGXT\nZly/5GH87tOX8WHDGny8dwNe2PIRLv73PZi3/h2EVcL4MjsE4Cz3KD7esR2XP/8M5rzzFt7dWI8l\nW7fgqVXLcfrjf8Wfly5BSMqU/94N1NQAQhDCbcWRB3wRm2tqJfKDARQXBCGlNUU9VsYjN992CD76\n74n4bMNMHH7YKlx1tb6tBGLolhVjM5widgUffFpMFkrkN6texJWjZuKIitEH/O6y9+/D5PLhGNen\n2hoRtiey1ARuf/tNXDf9SBxTO+yA3501fx6mDanGoQMGmmenBcyZA3z39jHoN2oZ8sua0LJ9MPKD\nPlxxvYGf/nUNOsIGRldXWPbcdkw69Af8WkfqMXqbx24GGjp2TlkxsiuP3eWThRJJLEAylIRPCEhS\nCPoCENH/ANi3KZylJlAQ7FpHWEr4fT4YSiHP74dPpO7C5xYip3Ekbrq9ErLwMwydvBLjD5EIlwZx\n2MhqzJw8GqWF+ekOk8NzWx+PnHn2VC2uRTq8iD0VFP2Yz6AfO5Fyf9veHrig9ig88PkCvLNzFUaX\nDkJA+NBqdOLVbR/joD6DMbSof+QP7doU7m05YzcunzQFdy16D6+vX4txFZXw+3xoCYXw/OpPMaGq\nCrV99Gh5W1cHnH9BCaScBBG9IQkBW25OdsQjp5w20donsAlpSM+xJ4dPxK7rMOujqw7CYeXD8fbO\nlVjbvANhJdEnrwj/N+4MHFQ2uMuZZONwsynUylITOHH4CEwfUo0F69ZgdWMDwlKhX2EBfnrCTEyo\nrHJtlNj9FN16WxgFNSvw8gersLVxHwwpUZgfxCHDB+HyU6fhoKFVTpvsgd71ijELDR07H41d6TBo\nIwk+IXB81XhM6z8KighlwUIEff79nWGmDrc3mnwqx5+FJuATAiePHI2jamqhFKFvQQGCfr+rnXr3\nU3TbI2/huGN9uOOa0zC4f6RSVinC25+sxS/n/wvfO/d4jKsd4KDVHkA0j92mylP9HDujrJgzh/4c\nAZFlAYmDLQi2t+/FX9a9hXd3foo8XwBBnx97Q60YWToQ14w5BeP7RlsHZepw02ny6Rx/huvf0rwP\n9y3+AG+uX4d8vx9Bvx972tsxtqIC3z/yGEwcOCij49lBT6fIV7gP7zx/OAbfsn/7gxMmjcLfF36M\n1o6QjRbqhZ1vIzs19pwHbWTzldOgjfYFkUEboeVZH0N7MplWYAGzFj1Az2z84IDHl+3eQBe/dw/t\naN+b3YGF6HnKgBCR35s8+ONrf3+C/vbfjw94fPGWzfTlvz1K25r3ZbcOC+npFA06/F2qOf5V+s+a\nzbSvrYPaOkO0p7mNXli0gq74zXz6bPMuIuIzrMMs7H4bXXf0bPrezFtzOgZsHLRhMzEpRkPTzcLh\ngc6tRiemlI/Y7zFJChP71cIglX1v9nSJ0SZvxraEOnFE9dD9HpNKYergITCIIG0Y6pBpmn9Pp2jb\n4qOQ31mNe/7xHs6+9WGcNvtBXHzH3/Dhqo34yYUnYfSQCt3aEcXZub0J9939GurX7zL92Ha/jbys\nmFQQn+6OWWNXtkmSz6lHVo7B3M9fxxcGHYra4gr4hR/7wm14bdsnGFjQFyWBguyeL50mn2X2SzKO\nGzYcv130Hr48+iCM6NcPfp8PTR0deOGz1RhcUorSfOv6rAA9K0sXXQRcdx3wu9/1LAkkO0W3fHsc\n6urGJX0uzdoRxWlsbMGzT36IKdNGoHZ4Lu2+D8TuTh4Rjd3LY09CNBp0cx/z3pKtwNcbB5ereJhC\nz/5WXR3e2rES/9y2DFvadsNQCuX5JZhRMQZXjT4JRYEs86bTafImV8T835HH4LW1n+O51auwsWkv\nwkqhoqgIx9UOxw1HHIniPGsde0/OFgAaG5PXcfV0in72M8Kowzbil/PXYXNDE4gIZUUFOPygoTj5\nsDEoKsjTrR1RHBWdaGVFgZLJcUJapKHsK7TqjV5j9ldOGnvbsxGNPbwh62O4glwEvnT/1gzx0I2D\nrIlYCcXJthQyPdV/fOHfdPXvnqZ/vLecVmzYRis2bKf3V26gHz/0Mn3vgeepsanVtZczHR8v3UAn\nzbidPlq8zvRj262xz5p4I938lTtzOgZ6qbHr59hbn4469o1ZH8MV5PpOS+XgzHgXp9vITMLCHSsp\nLI3eP0822ODcX1+7hkKGtetIdpl6earjXDDnMarfsbvH39X9Yh59vnmX0/vtWfOfJevppBm307KP\n1ltyfDvYj2joAAAblklEQVTjhG9MuIFuPftXOR2jt45dQz2DSbpjrp+NU00rMONzd4YdnmIbpp/t\n22btYGsLdgHD0eEahlLxYdYrG3ZCkbWbpz31fkukt5LAoPJSfLBqI5paO9ARMtARMhCWEht37oFS\nhLxgwLQhyXbTJcVY46pSvY3Mxs4JShpq7HpnxUgKg0gBI2sgNmyE3+jmPMwQ+MwQD1Po2YaSWLp7\nPSQpHN5/JDa07sL7DZ9hcGE/XD7yBGuLe0zcBTSUwoqdO/Dupnpsb2mBQGSq0onDR+LaaTPMszkJ\nMXOvuy6iqyeSydbBTy76An7x+Bv425v/QWXfYgQDfuxqaoWUCt895zjUVPWNP5/bHXl3Yp0p7RpQ\nYSVe5WlK9M2K2da+Emub38Oe0Caox45H3qJlGPxhI8a8vAOFe8PmtcYzY5MxxUbmA6tfxfKmjeiQ\nYby3azXWt+7E1PKReGrx81j9+k/wzT+8AN9Qi6o9TNwFvH/JB3hj/Tp8adQYzKiuAUDY0dqK2W+8\nhuOGDccNRxwFn029VnLZ6+5XUohfXnk6wobE1sZ96AwbqCgrRnlZio8DmqBkNGL3u7MSOBO8dMdU\nxCtP9bqDf7znOaxtfhcjSo7EqNJjICp8CG9/HquN+dhwTH8c81gryq++1RxHaFbbvSQh3sJdq/DE\nUddBCIFjF9yCF4//IcqefAaXzfo5Lvz1BbjSJ+CzqkWviakMT65Yjncuu/KAxy+bdBhOeORBXHP4\nEbZNUjIjmg4G/KgdsH/fcqVI65a3sVoCq6QYO/EGbaREz4h9fcsiHFZ+LiaVn4WBhQdhQMEYVJ/5\nPcy8cTHEaadj7yuPmusALRQP/cKHcPQGe1DZEBT58+ISiVAEX6ywx4pqDxOHkvQvKsJH27agNRSK\nD7IOS4lNTU0I+HwIaOxMVPQaXPbr+djV1OKwNdkjoxE7BylGSWXbDUov7whA1+6OpcEqbO/4FFUF\nY5DnKwSB4BdBtBl7EFJtCPqyLOpxgIr8UoSVRJ4vgLnTo1H5xo1oLcyDX6ouxx593FRMbAL+0+NO\nxA9efxVVxSUYWFoCAYEdLS3YsHcPbj1+JvwaO/ZYlP7I98932JLcsDKP3W6k4Q2zTo6mTcCOqfom\n3tn5RzxZfx1KAv0R8BWgzdiNkGrDERWXorpIn57Tv5962YEP1tTAaNyBW3/zAkS3x03HpF3AiQMH\n4Z8XfR1rdjdiW0szpCJUFRdjXKV+bW6b2zoAAKVFBQhLiT3N7ehbXIC8oH5v8USkwSxi9ypPk6Fn\n2948XyFmDrwBiiT2hrYgrNpRFChHadDcMmnHmDMHfWbNQp+NCekd2UgkDnStHFXeH6PK+1v6HFay\n9PPN+M1Tb2NPSzt+UncSnlr4CdZta8S+tk789JKTccwhI9IfxKXEJCXbuiJaiJJexJ4CPR07EaFN\n7sHWtuVoCm8DQSHfV4zqoknolzfUtf2/e40ZEoldM1KZ8eu/v41bLzkZZUUFOO9nf8Wd3zgNM8bV\nYmtjE3704CuYMroaRQXWtkewipgU42cgxdjZj1272yCRnnns9a2L8fym2VjTvBAAwQc/WowGvLDl\nZry3608IqXanTcydXDdsHe5aqTPVFX0wsLwU1RV9MGnUYADA4P59YEipddAQi9g5SDHeaLyUSADu\nnXCTjA8aHsXxA6/FoML9O/AdWXk55m+4Frs76zGw8CCHrHMJunaqcpi8YNf74dqvHL1fiqYhlXbv\nlURiGruXx54ZGt4GJXQ0O99filZjNyQZMFQIkgxICkd/S9qOyAOAeevfwR9W/zP3A2XYxsBsVjc2\n4Dv/fBFrdzem/2MLyLQ3e4xrzzw63v5gxrha+HwC23bvw9bGJpw2/WAEbfr4nwm9Xavy8tizIqez\nJYQ4VwixQgihhBBTzTIqJaQAod8HjRkVX8eSxsfxypbbsbjxcSxpfALv7fwzHl57CWpLpqE8zx7n\nZQVLd6/HoobPcz+QiTnq2bCzpQUvfrYaezo6bHm+RHJpgTNlTDWKu2no1937DwzoV4pLvjDVdWmb\nmayVSx47EUWKxTSJ2JcD+CqAhSbY0kv0jNgHFI7F+cPuxeTyc1Ac6Ic8XyGqCkbjvNrf4YiKSxDw\nZdnD3AVIUvCZUQnscKcqGY16/Q5IF2ZvL+QFA5a3Q8iWTNbKJY+9qzWCBho7Ea0CYLOGF9HYdSQk\n21AaqIRfBEFQKPT3RZ6v2GmzckYSIWBWiwcHO1XJeAaG/YGD2dsL5x030bXaeiZr5RKxx9fh5bEn\nQ8+IvaFzPd7dORdN4W1x595iNECSgaMrr8TwkiNc+0ZMh4JybXSYCbF2w1ZE7OnS882e5nPGjPHZ\n/UMbyGStMY1deBF7RqR17EKI1wEM7OFXs4noud4+kRBiFoBZAFCTy2YYSS019gXbfoUjKy5Dbcnh\n+z3eEm7Ac5t/jIqCESgLDnDIutyQSsGvWVO2nohJMWZv1PUmPX+/hpyHzANmzgb6bMSm5hp86/45\nuO9qPnn8mTQf5RKxK5vXkfZZiOgkIprQw1evnXr0OHOJaCoRTa2szKXaUs+IHQBKgpFSdYpGhook\nSoIVIFg70MFqJEzS2B0mnjNtcsTeG005tr1QfMQ84MuzgL71gCCosnrcv2UWvnV/9oNE3EYmWynx\na+KyDeBMkUak/saTYpKioKPGfnDZF/D2jj9gRMmR6Jc/FD740SGbsXrfG6jKH40Cf5nTJmaNItL+\njQcARvSGa3ZXx95qynV1wKXLZgN53e4CwTbMXTcb94FP1N7brRTJpB+766SYVAghzgJwD4BKAC8J\nIZYR0SmmWJYMMrRrAAYAk8rPwuCiCfhs31vY0v4JFBko8vfDwX1OxoiSGRAaR7ySeEgx8ZxpkyP2\n8vIDJyTFHu+OLO75LpDsce5EWt0KbfefYnRF7Bo4diJ6FsCzJtnSS/SM2AGgqmA0qgpGO22G6Sji\nsXlqVcSeCf7WGsiSA3cW/a2Z7Uvt3NuCovwgSgr1TaMFIqPxdNfXAfsjdg3PmL4aezL+u/dFGCrk\ntBlZY7CJ2KNvPpNvUrt39/7xWSPmAOFuRVrhosjjGXDmzQ/hz698kNG/cSNK6d0SIYbn2NOhaVZM\ndxRJSDIAAAI+rV+8ioljj2XFmB2xZ9Ip4b6r63D1kLnwt9QCJOBvqcXVQ+ZmnBUjJY99DyXJNvnC\nSuJ95b3N02ToGbHXty5BVcFoFPr7IKza8VHjk9jRsRp9goMwreIi+EXQaROzRhGxkGJijt3sm2ym\ns8Xvu7ou541SSYqFY5dKaV91CiRuAnsRexIUdLwf/Wv77+FHxHm/teMP6FStmF5xMUqDVViw7VcJ\nDcH0Q5KCX8eXUjdilaemVdFGsbtTglIEIv3L8IGIQ/Q09szR74yRAWj4sT/g62rS1Ni5AcdWXY2B\nhQdjSv+vocVwppugWZgWHWbb3tAk4r1iLHCIFs4WPwDpgk1gs1CK2HR2BOyTYjQ8Y3pmxQwqHI/l\ne19Cp2xB//xh2Ni2FIYKYU9oM/wiAKHjpYiiiODL1f5c2huaRLxXjIaBQyJdrW71j9gjPcx5rAPQ\nJI/dGfRsAnbCgO/g7R334fEN30ZxoB9e2PwTFAf6oyRQiZkDb9S6H7spEXuq8kzbujvyGMPGpVoT\n4CfFeDNPk0F6Onaf8OOEgdeCiCIzT0miKNAP+f4Sp03LmYjGnqMzdMH0pNiwCt3bIxic5oQqYrEO\nuwuUNHwFSy019hhCCPTNG4x++UNZOHUgVqCU5Jr0Vjd3eHoSkOAQNc/w4STFSKlYaOze5mlaJHT8\noMGZpC0FMtHNHZ6eBHRF7LpLGPGOiJqvA4hG7AykGLvz2PU7Y6RnHjtnInnsPVyTTEblODw9CQCk\nIu2jdYDPXgHgbZ5mi4ahr9KyCRhnJFTPDjFT3dzB6UlAtDUCkygXYDIAmsnmqVeglBY9N0+789m+\nt/DXdZej1djjtCk5k3TQhgt080xQKskNyqUk275wcsSf2XDJY/c09rTwcOwdshm7QxsBzYdsAIBC\nEinGBbp5JkgibXLYU21fSGVdoZXdsGkp4BUopYEkCymGELnQOhcmAQARRTdPe3jzuUA3zwSp9JFi\nUm1fsMqKMXhIMZ7GnhYeEbuiWItYvV+0CrFxcknW4bBungmRiF0PZ5hq+4KdFMNg89TLY0+LgpZm\nd4OIR8TO5QYF6PWxP9X2BSsphlkeu2uGWbsOMnj0Y0fMIer96SOeWsfBsROZ3tnRKlJtX/CK2D0p\nJhs0PGNMIva4xq67Y08jxWiEItImYk+1fRGfBKXJWlKhpD7XJBWexp4Wbhq73mvpWof+b76kaZsu\nJdn2hWTUBMyrPM0O/c4Yl6wYJhp7PGLXfB0AxwIlBjdbr0ApKzQ8YzwidoICILSedQoAMnqD4uIQ\ndcmKSYXBTGPncINSXh57Onho7IokfAxuUPFWt7m27XUB3CJ2LlkxXsSeOfqdMSZZMQQFoZGem4yu\nhlMMblJMInbFKWKXZJsztBIvKyYtnCJ2/dcRd+xcInYGjt2IaewM1qJTbUEq4gVKnmNPhgEtk3m6\nEYnYGUS5THqYA7FpPRzWYW8xjJUoJlJMvEDJqzw9ECJCpGmWVmb3iCLFJGKPZfcwiKqYROyKVcTu\n5bFng2aeJepEGES6BMliHfwKlPRfRywrJsAi0uWhsWuVxy6E+JUQ4lMhxCdCiGeFEH3NMqxnVPS7\n/hdakdS+OAnoao3AwbEbSmnTUiAVrCJ2ZlKMLhH7AgATiOhQAJ8B+FHuJqWAjOj/MNHYGdyg4n1J\nODhEjVoKpCKe7sjBITLZPNXKsRPRa0Rxb7sIQHXuJqUiGrFzcCLr1sC3eeuB4280I9a2l0d3R32a\ngKWiq0CJgUNksqEtDQkhhG1Sn5nPcjmAV5L9UggxSwixRAixZNeuXVk+BZOIfd480IeLIDrDB46/\n0YxYuiMLh0hMokPFqH8PEylmyOhBmPalybY9X9ozJoR4XQixvIevMxP+ZjYiXjepZyKiuUQ0lYim\nVlZWZmkuE4199mwQKQiVMBYvNv5GM2KOXffWCIB+M0+TIRkNs1ZSsRi08YVLjsPPXrBWqU4kbehL\nRCel+r0Q4lIApwOYSUTWDvCMptZpX3m6cSOUfwJ8kg54XDcUo37sBjH52M8oK4ZLxG43OXlIIcSp\nAH4A4Dgiakv397kjY89s/VNZSU0NyA+I7o492VgcF2PEHbvm1wSxiF1/J8IpK0YxyWO3m1xfxX8A\nUApggRBimRDijybYlIKYY9c8Yp8zByoYgE8mPBYbf6MZ8cpTBqmbOs08TYVkUnlKRNGZp3qvwwly\n8pBENMosQ3qHAHwDAF+xvU9rNnV1UB+8BrFjbWT8TU1NxKlrMvQ5EXaDNlhIMbGbrd7XhFNfebvR\nKvQV/sEQVe84bYYp0OCB8A0oBdS7TpuSE5wqT7lE7PFWypo7RGnzAGhOeGfMIYh4NAHjNMxaMUl3\n5OIQFaPsHrvxzphD8Bm0wUeKMZgUKHGRYrjcoJzAO2MOwW3QBodOlZGIXf91xDZPdV9LvNWtxnns\nRASrs8B7QiuNnROKJAIi32kzcoZV5akiBDSPcoGErBjNZaW4FKNhxN7Z3olNn27Fls+3IRwyUNyn\nCKOnjEDF4HJbnt9z7A7BJWKPb9QxWYvuUS4Qzf0W+g9K17U1wqbVW/DA9x7F7m17MHLScOQX5qFl\nbyvuu+4hHHvODNTddA6KSgsttcFz7A5BxKO7I6fKUzaDNph0qdRVY3/klvmY9sXDcMa3Tjngdzed\neQcWvfgRTrzgaEtt0OKMEYVA1BH9HnbaHFNQUCz6sXOqPDWY9IoxpEKAwycPGZNi9LomeYV5ENEb\nazgUhlIK4VDEbwWCAVtuuq6P2Cm0DNS5ADDWATAAUQwEpwKFX4Lw2aNXWQGRZBWxc5FiOBQoeRG7\ns5x25Rfwl588jpXvr8YhRx8Mf9CPUHsIC596H/0G9sW4GWMst8HVjp1aHwN1LoDInwmUnALAB6hW\nUMdLQNNCoPQHEIGRTpuZFZGIXa8XbE9wymOXTHrFSMmrgla3fY/xR47FL/45Gx+8tBSrF69FqD2E\norJCXHzLeRh/5FhbxuO527F3/gui+AqI/GP3e1zkT4facxVg1AO6OnbiMfOUy+apIgJB/0wSIOIQ\nOawjPnVIw7WQIkw5eSImHH0QjLBESd9i5BUEbbtJudqxwz8YCH8MCk4ARBEAAhAEVCOgWgFh7c6y\nlRB4FChx0dilphkYPcEmH19TKWbvriY8/duX8Obf3oEQAgXF+WjatQ8DhlXi0tvOx+GnTLLcBlc7\ndlH6Q1DzHUDj1wBfVcSRqwaAWiBKvgPkTXfaxKxhE7EzGWatOPW8kUwidk3z2O/9zkMYOnYI5m24\nf7/H1y/fiLuvegDFZYUYN2OspTa427H7iiH63A4iA5D1ALUBvkoI/0CnTTMBgtC9rzz4SDHxZmYM\nHKIkHhq70rTQqmVvKw6ObpBGhnH7IA2J4RNqUFCcj1CH9Zl9rnbsRBSJ0MNLAWMjAAX4SkF50wH/\nCK0LMBRJFumOkokUEx8ArfkNCuAznEJXKWbqyZPw0twF2NfQjFGThyGQF0B7Swfee/ZDCJ8PFUOs\nz+ZztWNHaCGo+W4gUAsRGAeIAEhuB/Z8CyiYCRR/G0LT3uwEHgVKXLJi4oVWDCJdLlkxXXnseq3l\n7BtOx6jJw/Hao2/hH394BaGOEEr7lWDi8ePxg0euQb8BfS23wdWOnVr+AFF2M0Re13RvAQCl34Vq\nPA/IXwPkTXTMvlzgErFzyWM3mHREBKJ95RlE7PGWAhquZeLx43HIsQcDiAx6t1tdcLVjhygD1K5o\ntSkh4tYJQuRFftZ4qDWfiJ20j9YBXhF7RNfVzxl2R1cpJhwK4+0n38e7zyzCtnU7oaRCSb9iTDxu\nPM749ikoH9jPchtc7RlF6fWgfbcC7f8AAmMhRACkmkCdb0IUnqltDjsQTUljELFH+qvo9cbrCS49\nzIFYHjufa6LbTer+6x9Ge2sHzr7hy6g5eAiET2BfYwv+9fi7uPOSe3Djg99C1dAKS21wt2MPHgLR\n/2lQaDFgfA5QCCJYDRRfBeHv77R5OUHg01KAQ+63ZDQwhM3sViN6TTSL2FcvWYvvP3INag+ujj9W\nVl6Ki28+F9ce8SO0NrUBQ621wfVnjFQL4BsEBMYDwYlAcDLgK3XarJzhorFzi9g5NM/ilseumxRT\nc/AQLHzyfezc1ID21g60t3Yg1BnG0tc/AQAUFFs/h8HVETuFPwM13wnIzYB/ICDyALkdoDBQ+n0g\n/wQtUx6JiJHGzsSxM9kEBvhUnuq6eXrD3G/i0Vvm4/qjfoJAXgCBvACaG5sxYmItrrt/FgYNH2C5\nDe527E0/hCi9ASL/mP0flztAe74BETwo0nZAMwgxJ6J/xK6I4GNQaNUVsfNYC4uIXcaKxvS6SeXl\nB/GNOy7CN+64CEbYQKgjbPlgje64/4z5BwGIDKaIfDcg/LE7nv2zBM0g5tjZROw+/W9QrCJ2bgVK\nAT2vCREhEAzs59Qbtu6OfxKxElefMVH4FdC+20GtjwKhf4M63wc6X4fa8y0gMA4Q1if6W0HsJsVh\nNJ4kBT+DiF1xainAZPNUVykmRqJMHBtofe93HkJTQ7Plz+1qKUYUXwLkTY30X29bDMAAfP0hCs8C\n8mdq6xgVSQBg0d1REbGIcmMtBTgM5ZaKUKCpM0xE1zz2nog5+Vue+p4tz+dqxw4AIjgOIjjOaTNM\nJS7FcHAiTDZP483MODhENhG7vtekvaUde3Y0oWHLbgTyAhhQW4m+VWXw++0J5nJy7EKI2wGcCUAB\n2Ang60S01QzD0kFtTwCFZ0EI61OHzIZXxM4jj91rAuY+YhG7bnnsaz/egIdvegLb1u3A1jXbUTt+\nKNr2tWH4obW45veXo2KI9TU4uZ6xXxHRoUQ0CcCLAG42waYDIApHv4y4Ph0xXc8Xr2IUsRukWMgX\n3DR2Dvn4SlMp5jdX3Icrf3kx/rz8t3j483tQO74aD392D2bWHYu7vzkXHW2dltuQU8RORPsSfiyG\nyWkqREak4rRzIUjWA6IAwj8UVHAaRNF5Zj6VrRCniJ3L7FZGEbtUSsv6ju7o2lIAAPpWlgEAqoZW\noH7FZrQ1t+OYr07HIzc/Ed9ItZKcNXYhxBwAlwBoAnBCzhYl0voXUGgRRP6RgNwK+IcA1ArafUlk\nkHWBuU9nF0L4UVUwBkUB65sBWc2QwnIEGeTjFwWDmFA1AKV5eU6bkjMjBvVHdUUfp83ImbI+hRg9\ndiCCea7fCtyPMVNG4m8/fwZTT5mExa/8B6MmD0d+YeR1ZZdMJtLdPYQQrwPoaWTRbCJ6LuHvfgSg\ngIhuSXKcWQBmRX+cAGB5VhbrQQWABqeNsBBvfXrjrU9faomoMt0fpXXsvUUIUQvgJSKa0Iu/XUJE\nU015YhfirU9vvPXpDff19YacBEUhxOiEH88A8Glu5nh4eHh45Equ4tUdQoixiKQ71gP4Zu4meXh4\neHjkQq5ZMWdn+U/n5vK8GuCtT2+89ekN9/WlxTSN3cPDw8PDHeiftOvh4eHhsR+OOXYhxO1CiE+E\nEMuEEK8JIfRrrJ4CIcSvhBCfRtf4rBCatqJMghDiXCHECiGEEkKwyEAQQpwqhFgthFgjhPih0/aY\njRDiISHETiEEu1RjIcRQIcS/hBCroq/L65y2yUmcjNhtaUfgIAsATCCiQwF8BuBHDttjNssBfBXA\nQqcNMQMhhB/AvQC+CGAcgAuEELy6zwEPAzjVaSMswgBwIxEdDOAIAN9meP16jWOO3ep2BE5DRK8R\nkRH9cRGA6lR/rxtEtIqIVjtth4lMA7CGiNYRUQjAE4g0uGMDES0EsNtpO6yAiLYR0dLo/zcDWAVg\niLNWOYejtbqWtiNwF5cDmO+0ER4pGQJgU8LPmwFMd8gWjxwQQgwDMBnAB85a4hyWOvZ07QiIaDaA\n2dF2BNcA6LEdgVvpTbsFIcRsRD4mzrPTNjPobTsJJvTUwIPVp8j/BYQQJQCeBnB9N1XgfwpLHTsR\nndTLP/0bgJegmWNPtz4hxKUATgcwkzTMK83g+nFgM4ChCT9XA7BltoCHOQghgog49XlE9IzT9jiJ\nk1kxrNsRCCFOBfADAGcQUZvT9nikZTGA0UKI4UKIPADnA3jeYZs8eomI9Cl+EMAqIrrLaXucxrEC\nJSHE0wD2a0dARFscMcYChBBrAOQDaIw+tIiI2LRcEEKcBeAeAJUA9gJYRkSnOGtVbgghvgTgbgB+\nAA8R0RyHTTIVIcTjAI5HpPvhDgC3ENGDjhplEkKIowG8A+C/AGLTeH5MRC87Z5VzeJWnHh4eHszw\nKk89PDw8mOE5dg8PDw9meI7dw8PDgxmeY/fw8PBghufYPTw8PJjhOXYPDw8PZniO3cPDw4MZnmP3\n8PDwYMb/A1td+BjoebYGAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10e9f42b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def perceptron(w,b,x,y):\n",
    "    if (y * (nd.dot(w,x) + b)).asscalar() <= 0:\n",
    "        w += y * x\n",
    "        b += y\n",
    "        return 1\n",
    "    else:\n",
    "        return 0\n",
    "\n",
    "w = nd.zeros(shape=(2))\n",
    "b = nd.zeros(shape=(1))\n",
    "for (x,y) in zip(X,Y):\n",
    "    res = perceptron(w,b,x,y)\n",
    "    if (res == 1):\n",
    "        print('Encountered an error and updated parameters')\n",
    "        print('data   {}, label {}'.format(x.asnumpy(),y.asscalar()))\n",
    "        print('weight {}, bias  {}'.format(w.asnumpy(),b.asscalar()))\n",
    "        plotscore(w,b)\n",
    "        plotdata(X,Y)\n",
    "        plt.scatter(x[0].asscalar(), x[1].asscalar(), color='g')\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, the model has learned something - all the red dots are positive and all the blue dots correspond to a negative value. Moreover, we saw that the values for $w^\\top x + b$ became more extreme as values over the grid. Did we just get lucky in terms of classification or is there any math behind it? Obviously there is, and there's actually a nice theorem to go with this. It's the perceptron convergence theorem.\n",
    "\n",
    "## The Perceptron Convergence Theorem\n",
    "\n",
    "**Theorem** Given data $x_i$ with $\\|x_i\\| \\leq R$ and labels $y_i \\in \\{\\pm 1\\}$ for which there exists some pair of parameters $(w^*, b^*)$ such that $y_i((w^*)^\\top x_i + b) \\geq \\epsilon$ for all data, and for which $\\|w^*\\| \\leq 1$ and $b^2 \\leq 1$, then the perceptron algorithm converges after at most $2 (R^2 + 1)/\\epsilon^2$ iterations.\n",
    "\n",
    "The cool thing is that this theorem is *independent of the dimensionality of the data*. Moreover, it is *independent of the number of observations*. Lastly, looking at the algorithm itself, we see that we only need to store the mixtakes that the algorithm made - for the data that was classified correctly no update on $(w,b)$ happened. \n",
    "As a first step, let's check how accurate the theorem is."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8VFX+//HXyaQX0khoCSRBCKQnJHRUREFXiqCIdeGr\nwq5ld3UF112/rlhW/dlw11XUVcEuiF97oywoERBCh9ATIJESSK+knd8fGcYEEtKmZGY+z8djHpm5\nc+49n7nJvHPn3Dv3Kq01Qggh7J+LrQsQQghhHhLoQgjhICTQhRDCQUigCyGEg5BAF0IIByGBLoQQ\nDkICXQghHIQEuhBCOAgJdCGEcBCu1uyse/fuOiIiwppdCiGE3du8efNprXVIa+2sGugRERFkZGRY\ns0shhLB7SqkjbWknQy5CCOEgJNCFEMJBSKALIYSDsOoYurCtmpoacnNzqaqqsnUpQohmeHp6EhYW\nhpubW4fml0B3Irm5ufj5+REREYFSytblCCEa0VqTn59Pbm4ukZGRHVqGDLk4kaqqKoKDgyXMheiC\nlFIEBwd36hO0BLqTkTAXouvq7PvTLgJ9zb48Xllz0NZlCCFEl2YXgb7uUD4vrjhAVU2drUsRwiwu\nvfRSq3zJ7l//+heDBw/m5ptvNutyDx8+TFxcXKttPvjgA7P0t3btWmJjY0lKSqKysrJDy3jyySc7\nNN8dd9xBZmbmBdu8+uqrvPPOOx1avjnZRaCPiAqmuq6ezUcKbV2K6ILq6pzrH31tbW2b277yyit8\n8803vP/++xasqHnmDPT333+fuXPnsm3bNry8vFpt39zfREuBrrWmvr6+xWW98cYbxMTEXLC/3//+\n9/z2t79ttS5Ls4tAT4sMwuCiWH8o39aliE665pprGDJkCLGxsbz++usALFy4kAceeMDUZvHixfzh\nD38A4L333mPo0KEkJSXxu9/9zvRG9fX15e9//zvDhg1j/fr1PPbYY6SlpREXF8ecOXPQWgOwadMm\nEhISGDFiBPPmzTNtVdbV1TFv3jzS0tJISEjgtddeO6/Ww4cPM3jwYGbPnk1sbCzjx483bR023sI+\nffo0Z89RtHjxYq655homTZpEZGQk//73v3nhhRdITk5m+PDhFBQUmJb/3nvvMXLkSOLi4ti4cSMA\n5eXl3HbbbaSlpZGcnMznn39uWu706dOZNGkS48ePP6/WF154gbi4OOLi4njxxReBhpDJyspi8uTJ\nLFiwoEn7xYsXc88995geT5w4kTVr1pjW7f33309KSgrjxo3j1KlTAGzevJnExERGjBjByy+/3GQ9\njRkzhpSUFFJSUli3bh0ADz74IGvXriUpKYkFCxa0uM6PHz/OxRdfTFJSEnFxcaxdu7ZJrW+88QZL\nly7lscce4+abb0ZrbfpdxsfHs2TJEgDWrFnD2LFjuemmm4iPj2+yjAcffJDKykqSkpK4+eabTb/b\nu+66i5SUFHJycrjzzjtJTU0lNjaWRx55xDRv49+1r68vDz30EImJiQwfPpyTJ08CMH/+fJ577jlT\n+7/85S8MHTqUgQMHml5PRUUF119/PQkJCcyYMYNhw4aZ/1Oa1tpqtyFDhuiOmvLvdD3tlZ86PL/Q\nOjMz03R//he79PWvrjPrbf4Xu1qtIT8/X2utdUVFhY6NjdWnT5/WeXl5un///qY2V155pV67dq3O\nzMzUEydO1NXV1Vprre+880799ttva621BvSSJUvOW67WWt9yyy36iy++0FprHRsbq3/6qeHv5i9/\n+YuOjY3VWmv92muv6ccff1xrrXVVVZUeMmSIzsrKalJrdna2NhgMeuvWrVprradPn67fffddrbXW\nl1xyid60aZPWWutTp07pfv36aa21XrRoke7fv78uKSnReXl5ulu3bnrhwoVaa63vvfdevWDBAtP8\nd9xxh9Za6x9++MFU11//+ldTH4WFhXrAgAG6rKxML1q0SPfp06fJ6zwrIyNDx8XF6bKyMl1aWqpj\nYmL0li1btNZa9+vXT586deq8eRYtWqTvvvtu0+Orr75ar1692rRu33vvPa211o8++qipXXx8vF6z\nZo3WWuu5c+eaai4vL9eVlZVaa63379+vz77PV69era+++mpTHy2t8+eee04/8cQTWmuta2trdUlJ\nyXn1zpw5U3/88cdaa62XLVumL7/8cl1bW6tPnDihw8PD9bFjx/Tq1au1t7f3eb/Hs3x8fEz3s7Oz\ntVJKr1+/3jTt7Lqtra3Vl1xyid6+fbvWuunvGjD9bc2bN8/0eh555BH97LPPmtr/+c9/1lpr/fXX\nX+tx48ZprbV+9tln9Zw5c7TWWu/cuVMbDAbTchtr/D49C8jQbchYu9hCBxjRP5jtOUWUn2n7x03R\n9fzrX/8ybd3k5ORw4MABQkJCiIqKYsOGDeTn57Nv3z5GjRrFqlWr2Lx5M2lpaSQlJbFq1SqysrIA\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d056a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Eps = np.arange(0.025, 0.45, 0.025)\n",
    "Err = np.zeros(shape=(Eps.size))\n",
    "\n",
    "for j in range(10):\n",
    "    for (i,epsilon) in enumerate(Eps):\n",
    "        X, Y = getfake(1000, 2, epsilon)\n",
    "\n",
    "        for (x,y) in zip(X,Y):\n",
    "            Err[i] += perceptron(w,b,x,y)\n",
    "\n",
    "Err = Err / 10.0            \n",
    "plt.plot(Eps, Err, label='average number of updates for training')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, the number of errors (and with it, updates) decreases inverseley with the width of the margin. Let's see whether we can put this into equations. The first thing to consider is the size of the inner product between $(w,b)$ and $(w^*, b^*)$, the parameter that solves the classification problem with margin $\\epsilon$. Note that we do not need explicit knowledge of $(w^*, b^*)$ for this, just know about its existence. For convenience, we will index $w$ and $b$ by $t$, the number of updates on the parameters. Moreover, whenever convenient we will treat $(w,b)$ as a new vector with an extra dimension and with the appropriate terms such as norms $\\|(w,b)\\|$ and inner products. \n",
    "\n",
    "First off, $w_0^\\top w^* + b_0 b^* = 0$ by construction. Second, by the update rule we have that\n",
    "\n",
    "$$\\begin{eqnarray}\n",
    "(w_{t+1}, b_{t+1})^\\top (w^*, b^*) = & (w_t, b_t)^\\top (w^*, b^*) + y_t \\left(x_t^\\top w^* + b^*\\right)\\\\\n",
    "\\geq & (w_t, b_t)^\\top (w^*, b^*) + \\epsilon \\\\\n",
    "\\geq & (t+1) \\epsilon\n",
    "\\end{eqnarray}$$\n",
    "\n",
    "Here the first equality follows from the definition of the weight updates. The next inequality follows from the fact that $(w^*, b^*)$ separate the problem with margin at least $\\epsilon$, and the last inequality is simply a consequence of iterating this inequality $t+1$ times. Growing alignment between the 'ideal' and the actual weight vectors is great, but only if the actual weight vectors don't grow too rapidly. So we need a bound on their length:\n",
    "\n",
    "$$\\begin{eqnarray}\n",
    "\\|(w_{t+1}, b_{t+1}\\|^2 \\geq & \\|(w_t, b_t)\\|^2 + 2 y_t x_t^\\top w_t + 2 y_t b_t + \\|(x_t, 1)\\|^2 \\\\\n",
    "= & \\|(w_t, b_t)\\|^2 + 2 y_t \\left(x_t^\\top w_t + b_t\\right) + \\|(x_t, 1)\\|^2 \\\\\n",
    "\\geq & \\|(w_t, b_t)\\|^2  + R^2 + 1 \\\\\n",
    "\\geq & (t+1) (R^2 + 1)\n",
    "\\end{eqnarray}$$\n",
    "\n",
    "Now let's combine both inequalities. By Cauchy-Schwartz, i.e. $\\|a\\| \\cdot \\|b\\| \\geq a^\\top b$ and the first inequality we have that $t \\epsilon \\leq (w_t, b_t)^\\top (w^*, b^*) \\leq \\|(w_t, b_t)\\| \\sqrt{2}$. Using the second inequality we furthermore get $\\|(w_t, b_t)\\| \\leq \\sqrt{t (R^2 + 1)}$. Combined this yields\n",
    "\n",
    "$$t \\epsilon \\leq \\sqrt{2 t (R^2 + 1)}$$\n",
    "\n",
    "This is a strange equation - we have a linear term on the left and a sublinear term on the right. So this inequality clearly cannot hold indefinitely for large $t$. The only logical conclusion is that there must never be updates beyond when the inequality is no longer satisfied. We have $t \\leq 2 (R^2 + 1)/\\epsilon^2$, which proves our claim. \n",
    "\n",
    "**Note** - sometimes the perceptron convergence theorem is written without bias $b$. In this case a lot of things get simplified both in the proof and in the bound, since we can do away with the constant terms. Without going through details, the theorem becomes $t \\leq R^2/\\epsilon^2$. \n",
    "\n",
    "**Note** - the perceptron convergence proof crucially relied on the fact that the data is actually separable. If this is not the case, the perceptron algorithm will diverge. It will simply keep on trying to get things right by updating $(w,b)$. And since it has no safeguard to keep the parameters bounded, the solution will get worse. This sounds like an 'academic' concern, alas it is not. The avatar in the computer game [Black and White](https://en.wikipedia.org/wiki/Black_%26_White_(video_game%29) used the perceptron to adjust the avatar. Due to the poorly implemented update rule the game quickly became unplayable after a few hours (as one of the authors can confirm)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Stochastic Gradient Descent\n",
    "\n",
    "The perceptron algorithm also can be viewed as a stochastic gradient descent algorithm, albeit with a rather strange loss function: $\\mathrm{max}(0, -y f(x))$. This is commonly called the hinge loss. As can be checked quite easily, its gradient is $0$ whenever $y f(x) > 0$, i.e. whenver $x$ is classified correctly, and gradient $-y$ for incorrect classification. For a linear function, this leads exactly to the updates that we have (with the minor difference that we consider $f(x) = 0$ as an example of incorrect classification). To get some intuition, let's plot the loss function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAD8CAYAAABXe05zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4lPW9/vH3FwIECCpCsNQoREFZg0gAK2IR/fWgLHKO\nCFal9iiCK0hVBJfao2JRK7UuVTkii+JWAaWKWHEpilYNBARBATmIYTMECVQSSMj398dkhgTDZJLM\nM88y9+u6uGRgMvOZwHXzOPPcz8dYaxEREf+o5/YAIiJSMwpuERGfUXCLiPiMgltExGcU3CIiPqPg\nFhHxGQW3iIjPKLhFRHxGwS0i4jMpTjxoy5Ytbdu2bZ14aBGRQFq2bNlOa216LPd1JLjbtm1LTk6O\nEw8tIhJIxphvY72v3ioREfEZBbeIiM8ouEVEfMaR97gluEpKSsjLy6O4uNjtUZJOamoqGRkZNGjQ\nwO1RxGUKbqmRvLw8mjVrRtu2bTHGuD1O0rDWUlBQQF5eHpmZmW6PIy6LKbiNMZuAvcBBoNRam+3k\nUOJdxcXFCm0XGGNo0aIF+fn5bo8iHlCTI+5zrLU7HZtEfEOh7Q593yXMOx9OlpXBhw/D1ly3JxER\n8bRYg9sC/zDGLDPGjK7qDsaY0caYHGNMTq3+d25/IXz+LLzyG9i3q+ZfL1JHr732Gvfccw8A+/fv\nZ8SIEbRr147evXuzadOmKr/m1ltvpXPnztx6660APPLII8yePTvq81xyySWsX78+cvu8887jhx9+\niM+LkORgra32B/Dz8v+2AlYCZ0e7f48ePWytfJdj7T0trX3uImsPHqzdY4ij1qxZ4/YIjvnFL35h\n8/PzrbXWPvHEE3bMmDHWWmtffPFFO3z48Cq/plmzZra4uNhaa21JSYnt2rWrLSkpifo8H3zwgR01\nalTk9syZM+19990X04xB/v4nOyDHxpDH1trYjrittVvL//s9MB/o5ci/Ihk9YMAU2PAOLHnQkacQ\n/9u0aRMdOnRg1KhRdOnShcsuu4zFixfTp08f2rdvz2effcZnn33GmWeeSffu3TnzzDP5+uuvAZg6\ndSpXXnklAKtWraJLly7s27ePdevW0ahRI1q2bAnA66+/zhVXXAHAsGHDePfdd8MHMRFDhgzhxx9/\npHfv3rz88su89957nH766aSkpFBaWkrPnj354IMPAJg0aRJ33HEHAH379mXx4sWUlpZGHufFF190\n/PsmwVHth5PGmKZAPWvt3vKf/wq4x7GJsq+EvM/hgylwfDa0P8+xp5K6+Z+/f8marXvi+pidfn4U\ndw/uXO39NmzYwN/+9jemTZtGz549eeGFF/joo49YsGAB999/P7Nnz2bJkiWkpKSwePFibr/9dubO\nnctNN91Ev379mD9/PpMnT+bpp5+mSZMmLF26lNNPPz3y+Fu2bOGEE04AICUlhaOPPpqCgoJIsAMs\nWLCAtLQ0VqxYAcDdd99Njx49Il8zc+ZMhg0bxqOPPsqiRYv49NNPAahXrx7t2rVj5cqV9OjRg+bN\nm7N//34KCgpo0aJF3L6Xklgfrs8nd/NubjinHfXqOftBcixnlRwHzC//RDsFeMFau8ixiYyBgVNh\n+2qYexWMWQLN2zj2dOJPmZmZdO3aFYDOnTtz7rnnYoyha9eubNq0icLCQq644grWr1+PMYaSkhIg\nFJozZ84kKyuLMWPG0KdPHwC2bdtGevqhC7MdfnQN1Z/VsW3bNjp27Bi53blzZ0aOHMngwYP55JNP\naNiwYeT3WrVqxdatWyNBH76t4PanLbuLGPtiLi3TGjGqbyZNGjpbkan20a21G4Fujk5xuIZNYMRs\neLpf6MPKK9+GBqkJHUGqF8uRsVMaNWoU+Xm9evUit+vVq0dpaSl33XUX55xzDvPnz2fTpk3069cv\ncv/169eTlpbG1q1bI7/WuHFjCgsLI7czMjL47rvvyMjIoLS0lMLCQo499tioMzVu3PgnjdJVq1Zx\nzDHHsGPHjkq/XlxcTOPGjY94W/xjf+lBrpuznJKDlqdG9nA8tMFLpwMe7tiT4L+mwbYV8Natbk8j\nPlNYWMjxxx8PwMyZMyv9+rhx41iyZAkFBQW8+uqrAHTs2JENGzZE7jdkyBBmzZoFwKuvvkr//v0x\nxrBlyxbOPffcKp/z8MeYN28eBQUFLFmyhLFjx7J79+7I761bt47OnUP/8Flr2b59O7qGvT/d+8Ya\nVn63mz9dnMXJ6WkJeU7vBjfAqQOg7y2wfDYsf87tacRHJkyYwKRJk+jTpw8HDx6M/Pr48eO57rrr\nOOWUU5g+fToTJ07k+++/5+yzzyY3NzfyFslVV11FQUEB7dq1Y+rUqUyZMgUIvR2SklL1EdX555/P\nkiVLANi5cycTJ05k+vTpnHLKKdxwww2MGzcOgB07dtC4cWNat24NwLJlyzjjjDOO+LjiXfOW5/H8\nvzYz5uyTGNCldeKeONbTT2ryo9anA1blYKm1sy609p50a7fkxu9xpVaCfDra2LFj7TvvvBP1Po89\n9ph9/fXXj/j7Q4cOtevWrYv6GFOnTrXPPPNMpeddvHhxTDMG+fvvN2u2FtpT71xoRzz9sS0prfvp\ny8T7dEBX1asPF02HpunwykiVc8Qxt99+O/v27Yt6nxtuuIEhQ4Yc8fenTJnCtm3boj7GMcccEznV\nEKBLly5HfPtFvKmwqIRrnl/G0Y0b8NivTyelfmKj1NgqPj2vq+zsbBv31WV5y2DGAMj8JVz6CtTz\n/r85QbR27dpKZ05IYun7776yMsvo55bxwdff8/KYM+jRJvqH1rEyxiyzMV7Azz/pp3KOiHjAk//8\nhsVrd3DnwI5xC+2a8k9wQ6ic0+3SUDln/WK3pxGRJPPR+p08/I+vGdLt51xxZlvX5vBXcBsDAx+G\n47qEyjk/xLwUWUSkTrbuLmLsS7m0a5XGlIu6unqZXX8FNxwq51gb+rCyRCu0RMRZ+0sPcu2c5Rwo\nLeOpyxNTsonGf8EN5eWcp2HbSpVzJG5qc1nXivLz8+nduzfdu3fnww8/xFpL//792bPnyNdzyc/P\nZ8CAAZHbq1at4re//W1dX4rEWcWSzUkJKtlE48/gBjj1fOh7c3k5J/r1j0Vi8eCDD3LdddcBMH36\ndJo3b86GDRsYP348t912W7Vf/+6779KhQwdyc3Pp27cvCxcupFu3bhx11FFH/Jr09HRat27N0qVL\nAejatSt5eXls3rw5Pi9K6sy1kk0U/g1ugHPugJP6wZu3aHNOEvHKZV0rWrFiBRMmTGDhwoWcdtpp\nFBUVMWfOHC688EIAPv/8c7KysiguLubHH3+kc+fOrF69GoChQ4cyZ86cyGMNHjyYl156Kf7fOKmx\ntdv2cPv8VZxx0rHc+h+nuj1OhH/O4z6SH3fC078Mndc9+p/QxJ3Tc5JFpfOI35oI21fF9wl+1hXO\nnxL1Lps2baJdu3bk5ubSuXNnevbsSbdu3Zg+fToLFixgxowZzJ49myZNmkQu6/rkk08yd+5cysrK\n6NevH+PHj2fy5Mn85S9/oU+fPsyYMYPVq1fz8MMPA6FSzKJFi8jIyADg5JNP5tNPP610WdfDzZw5\nk5ycHB5//HEA2rRpw+rVq2nWrBkAd955J8XFxRQVFZGRkcGkSZOA0CVkBwwYwKpVoe/l0qVLmTJl\nCn//+99/8hw6jztxCotKGPL4RxSXHOSNG/uS3qxR9V9UBzU5j9v/F0do2hKGz4JnB8C80SrnJAkv\nXtb1cLt27YqENsDvf/97evbsSWpqKo8++mjk18OXdD3SbUm8sjLLza+sYMsPRbw85gzHQ7um/B/c\nABnZoaO0N28OlXP6TXR7ouRQzZGxk7xwWdc77riDN998EyCyTKGilJQUysrKqFd+ILFr1y7+/e9/\nU1JSQnFxMU2bNgV0iVcvCpVsvucPgzu5VrKJJjiHptlXQdYlKucIkJjLuk6ePJkVK1ZUGdoAp556\nKhs3bozcHj16NPfeey+XXXZZpQ87161bR5cuXY54WxLLKyWbaIIT3MbAoD/DcZ1VzhFXLut6uIED\nB0Z2Ts6ePZuUlBQuvfRSJk6cyOeff857770HwPvvv8/AgQMjX3f4bUkcL5Vsoor1MoI1+RHXy7rW\n1M4N1t5/grVPnW3tgSL35gioIF9WNB6Xda1o69at9rzzzqv2fn379rW7du2y1lpbXFxse/fufcRN\n8UH+/rutuKTUXvj4R7bz7xfZb77fm/DnJ1CXda2pFifDfz6lzTlSY/G4rGtFrVu35uqrr662gPO7\n3/2O5s2bA7B582amTJmipQouuPeNNazwUMkmmmD+7ehwAZz1O/hoKmT0gtNHuj2R+MBxxx0XcyjH\navjw4VF/Pz09naFDh0Zut2/fnvbt28d1BqmeF0s20QTviDus/53l5ZybYWvVHx5J7VgHzv2X6un7\n7gyvlmyiCW5wa3OOI1JTUykoKFCIJJi1loKCAlJTU90eJVAKi0q41sVNNrUVzLdKwlTOibuMjAzy\n8vLIz893e5Skk5qaGmlySt2FSjYryfuhiJdGe69kE02wgxtUzomzBg0akJmZ6fYYInUW3mRz9+BO\nZLf1XskmmuQ4/FQ5R0QqWLrhUMnmtx4t2USTHMGtco6IlNu6u4gbX8zl5PQ0/vhfHi7ZRJEcwQ3l\nm3OeK9+c8xttzhFJQvtLD3JdeJPNyB40beTPd4uTJ7ihwuYclXNEklG4ZPPQsCxO9njJJprkCm44\nbHPOc25PIyIJUrFkc35X75dsokm+4IYKm3NUzhFJBn4s2UQTc3AbY+obY3KNMW84OVBCqJwjkjQK\ni0q4xoclm2hq8grGAWudGiThwuWcPdtg/hgoK3N7IhGJs3DJZssPRfz1stN9VbKJJqbgNsZkAAOB\nZ5wdJ8HC5Zz1/4AlD7k9jYjEWbhkc8fAjp7cZFNbsR5xPwJMAIJ3WBop5/xR5RyRAAmXbAb7tGQT\nTbXBbYwZBHxvrV1Wzf1GG2NyjDE5vrqORcVyzrxRKueIBEDFks0Un5ZsoonliLsPMMQYswl4Cehv\njHn+8DtZa6dZa7OttdkVt2X7QsMmMHx26H1ulXNEfG1/6UGuLS/ZPHm5f0s20VQb3NbaSdbaDGtt\nW+AS4D1r7eWOT5ZolTbnTHB7GhGppXvfWMPK8pJNu1b+LdlE4//zYuIpvDln+SzI/cn/VIiIx4VL\nNqMDULKJpkbBba39wFo7yKlhPKH/nZD5y1A5Z9tKt6cRkRiFSza9M49lQgBKNtHoiPtw9erDsGeh\nSQt4eSQU/eD2RCJSjYolm8cvDUbJJppgv7raatoy9GHlnq2hzTkq54h4VlBLNtEouI+kYjnnwz+5\nPY2IHMFTS4JZsolGwR1NuJzz/v2wQeUcEa9ZumEnf3o7mCWbaBTc0VTanKNyjoiXBL1kE42Cuzoq\n54h4TlA22dSWgjsWKueIeMp9b6wNxCab2lJwx0rlHBFPmJ+bx3P/+jbwJZtoFNw1oXKOiKvWbtvD\npHnJUbKJRsFdEyrniLimsKiEa59fxlGpDXjs0u6BL9lEk7yvvLZUzhFJuLIyyy1/W0leecmmVbNU\nt0dylYK7NjKyYcAfVc4RSZCnlnzDO2t2cPsFHclumxwlm2gU3LXVcxRkjVA5R8Rh4ZLNoKzW/Hef\ntm6P4wkK7toyBgY9Aq06hco5uze7PZFI4GwrLGJsecnmgYuykqpkE42Cuy4aNoERz0HZQZVzROLs\nQGkZ181ZTnHJwcBusqktBXddhcs5W3Nh0W1uTyMSGPe9uYbczbt56OJugd1kU1sK7njoMBDOGg/L\nZqqcIxIH83PzmP3Jt1zdN5MLkrRkE42CO17OuRMyz1Y5R6SOwiWbXpnHctuADm6P40kK7nipnwIX\nqZwjUhd7ig+VbB5P8pJNNPquxFNaOlw8S+UckVoIb7LJ+6GIJ1SyiUrBHW8n9FQ5R6QWwiWbSRd0\npKdKNlEpuJ2gco5IjXxcoWRzpUo21VJwO0HlHJGYbSsMbbI5SSWbmCm4naJyjki1KpZsnlLJJmYK\nbiepnCMSlUo2taPgdprKOSJVei13i0o2taTgToRzKm7O+cLtaURc99X2PUyc94VKNrWk4E6E+ilw\n0XRofCy8fLnKOZLU9hSXcM1zKtnUhb5jiZKWrs05kvRUsokPBXciqZwjSU4lm/hQcCeayjmSpMKb\nbAaqZFNn1Qa3MSbVGPOZMWalMeZLY8z/JGKwwDIGBv0ZWnVUOUeSRniTzUnpaTyokk2dxXLEvR/o\nb63tBpwGDDDGnOHsWAHXsCmMeF7lHEkKKtnEX7XBbUP+XX6zQfkP6+hUyUDlHEkSKtnEX0zvcRtj\n6htjVgDfA+9Yaz+t4j6jjTE5xpic/Pz8eM8ZTJXKOXPcnkYk7lSycUZMwW2tPWitPQ3IAHoZY7pU\ncZ9p1tpsa212enp6vOcMrsjmnN+pnCOBopKNc2p0Vom1djfwATDAkWmSUXhzjso5EiAq2TgrlrNK\n0o0xx5T/vDFwHvCV04MllUrlnDEq54ivWWu5RSUbR8Xyz2Br4H1jzBfA54Te437D2bGSUKSc8zZ8\n+LDb04jU2lP/3Mg/VLJxVLXn5VhrvwC6J2AW6TkKvvsM3p8Mx3eHdue5PZFIjSzdsJOH3v5KJRuH\n6Y0nLzEGBj+ico74kko2iaPg9hqVc8SHVLJJLAW3F7U4GYY+GSrnvDXB7WlEqqWSTWIpuL2q4yDo\ncxMsn6XNOeJp83PzVLJJMAW3l/W/C9r2Ld+cs9LtaUR+Yu22PUyat0olmwRTcHtZ/RQYNqO8nDMS\n9u1yeyKRiD3FJVz7vEo2btB32usqlnPmq5wj3qBNNu5ScPuBNueIxzy9ZKM22bhIwe0XPUdB1+Ha\nnCOu+7i8ZDNIJRvXKLj9QuUc8YBthUXcWF6yeUAlG9couP1E5RxxkUo23qHg9puK5RxtzpEEmqyS\njWcouP2o4yBtzpGEei13C7M++ZZRZ6lk4wUKbr+qtDlH5Rxxzlfby0s2bY/ltvNVsvECBbdfhTfn\nNGkRKudoc444ILzJJi01hccv7U4DlWw8QX8KfpaWDhfP0uYccUTFTTZ/vex0Wh2lko1XKLj9Tptz\nxCHaZONdCu4g6DkKskaENudseNftaSQAPv5GJRsvU3AHgTEw6BFo1UnlHKmzbYVF3PiCSjZepuAO\nioZNYMRzUFYKr1wBpfvdnkh8SCUbf1BwB0mknLMc3lI5R2pOJRt/UHAHTXhzzrIZKudIjby+QiUb\nv1BwB1H/uyqUc75wexrxga+372XiXJVs/ELBHUThck7jY+Hly1XOkaj2FJdwzfMq2fiJ/oSCKi0d\nhqucI9GFSzabd+3jiUtVsvELBXeQndAL/uN+lXPkiCIlm/M70CtTJRu/UHAHXa+ryzfnqJwjlYU3\n2VzQ9WdcdVam2+NIDSi4g06bc6QK4U02mS2b8uCwbirZ+IyCOxlENueonCOVSzZPj+xBmko2vqPg\nThYq50i5cMnmwWHdaNeqmdvjSC1UG9zGmBOMMe8bY9YaY740xoxLxGDigIrlnBUvuD2NuCC8yeaq\nszIZmKWSjV/FcsRdCtxsre0InAFcb4zp5OxY4pj+d0HbvvDGeJVzkszX2/cyad4qerZtzkSVbHyt\n2uC21m6z1i4v//leYC1wvNODiUPqp8CwGaFyzivanJMsKpZsnrj0dJVsfK5Gf3rGmLZAd+BTJ4aR\nBAmXcwq3qJyTBFSyCZ6Yg9sYkwbMBW6y1u6p4vdHG2NyjDE5+fn58ZxRnKByTtJQySZ4YgpuY0wD\nQqE9x1o7r6r7WGunWWuzrbXZ6enp8ZxRnNLrauh6sco5ARYu2Qzs2lolmwCJ5awSA0wH1lprpzo/\nkiSMMTD4LyrnBFTFks0Dw7TJJkhiOeLuA4wE+htjVpT/uMDhuSRRGjaF4eHNOb9ROScgDpSWcb1K\nNoEVy1klH1lrjbU2y1p7WvmPhYkYThKkZTsY+lfYmqtyTkBMfnMNy1WyCSydEyQhHQernBMQ4ZLN\nKJVsAkvBLYeonON74ZKNNtkEm4JbDlE5x9e0ySZ56E9WKqtYzpl/jco5PmGt5da/qWSTLBTc8lPh\ncs66RfCRyjl+8PSSjbz9pUo2yULBLVULl3PeUznH6z7esJMHF33FwCyVbJKFgluqpnKOL1Qq2Vyk\nkk2yUHDLkVUq52hzjtdok03yUnBLdJFyjjbneI022SQvBbdUr+Ng6DNO5RwP0Sab5Kbgltj0/73K\nOR6hTTai4JbYRMo5zVXOcZE22QgouKUm0tJh+GyVc1yiko2EKbilZlTOcY1KNhKm4Jaaq1jO+eY9\nt6dJCh9/o5KNHKLglpqrWM559SrY/Z3bEwXa9sJixqpkIxUouKV2tDknIUIlm2UUHVDJRg5RcEvt\nVSznLJro9jSBdP/CtdpkIz+h4Ja6CZdzcp6FFS+6PU2gvL5iCzM/3qSSjfyEglvqLlLOuQm2r3J7\nmkD4evteJs5VyUaqpuCWuqufAsOeDZVzXh4JRbvdnsjX9haXcK1KNhKF/kZIfKS1gotnQeF3KufU\nQahk8wXfqmQjUSi4JX5O7F1eznkLPprq9jS+NG3JRhZ9uV0lG4lKwS3x1Ws0dBkG70+Gb953expf\n+eSbAh5Y9BUXdP2ZSjYSlYJb4ssYGPIopHeAuVdBYZ7bE/nC9sJibnxxOZktm/LgsG4q2UhUCm6J\nv3A552CJyjkxOFBaxvUvLFfJRmKm4BZnhMs5W5bBokluT+Np9y9cy7Jvf+CBYVkq2UhMFNzinEg5\nZ7rKOUdQsWQzKOvnbo8jPqHgFmepnHNEKtlIbSm4xVkq51QpXLJp2kglG6k5/W0R56mcU0nlkk13\nlWykxqoNbmPMs8aY740xqxMxkATUib3hV5NVzuFQyWbigA70PqmF2+OID8VyxD0TGODwHJIMeo9J\n+nJOxZLNqL4q2UjtVBvc1tolwK4EzCJBF96c0/LUpCzn7Nijko3ER9ze4zbGjDbG5BhjcvLz8+P1\nsBI0jdJgxPNQeiCpyjmhTTbL2XfgIE9drpKN1E3cgttaO81am22tzU5PT4/Xw0oQJWE5J1yyeXBY\nFu2PU8lG6kZnlYg7Og2BM8eGyjkrX3J7GkeFSzZX9lHJRuJDwS3uOffuUDnn78Et56zbcahkM+kC\nlWwkPmI5HfBF4BPgVGNMnjHmKufHkqQQKeccE8hyzt7iEq55LlSyeVwlG4mjWM4q+bW1trW1toG1\nNsNaOz0Rg0mSCGg55/CSzXEq2Ugc6RBA3BfAco5KNuIkBbd4Q4DKOSrZiNMU3OINASnnhDfZtFXJ\nRhyk4BbvaJQGI57zbTknvMlm34GDPK2SjThIwS3e0rI9DH3Cl+WcyCabi1SyEWcpuMV7Ol14qJzj\nk805C1ZujZRsBndTyUacpeAWbwqXc94YD9u9fUXhdTv2cturX5DdRiUbSQwFt3hTpXLO5Z4t51Qs\n2fz1MpVsJDH0t0y8q2I557VrPVfO0SYbcYuCW7wtXM75eiEs/bPb01Tyvx+qZCPuUHCL94XLOe/d\nBxs/cHsaAP61sYAHFn3N+V1UspHEU3CL90XKOafAq1e6Xs7ZXljMDS8sp02LJjx0sUo2kngKbvEH\nj2zOUclGvEDBLf7hgXKOSjbiBQpu8ZdOF8KZN7qyOSe8yea/+7RVyUZcpeAW/zn3D9DmrPLNOYkp\n54Q32WS3ac7tF3RMyHOKHImCW/wnXM5JPToh5ZyKJZsnVLIRD9DfQPGnZsfBcOc351hrmfBqqGTz\nuDbZiEcouMW/TjzD8c05//vhRt5aHSrZnKGSjXiEglv8zcHNOeGSjTbZiNcouMXfKpZz4rg5Z8ee\nYm54IZc2LZpok414joJb/C/O5ZySg2VcP2c5+w6UqmQjnqTglmCIYznn/oVryfn2B6aoZCMepeCW\n4IhDOWfByq3MWBoq2QxRyUY8SsEtwVKHcs76HXuZOPcLlWzE8xTcEiy1LOf8e38pY55fRpOGKtmI\n9+lvpwRPxXJODJtzQptsVvJtgUo24g8KbgmmcDknhs05z3z4f7y1eju3DThVJRvxBQW3BFcMm3M+\n3VjAlEVfcX6Xn3F135MSO59ILSm4Jbiq2ZyzY08x10dKNlkq2YhvxBTcxpgBxpivjTEbjDETnR5K\nJG4qlXOuiJRzwiWbH/eX8tTlPWiW2sDlQUViV21wG2PqA08A5wOdgF8bYzo5PZhI3LRsD0P/Clty\n4O3bgUMlmweGZXGKSjbiM7F0eXsBG6y1GwGMMS8BFwJrnBxMJK46DYEzx8LHj7K8rD0zlp6gko34\nVizBfTzwXYXbeUBvJ4YZ/NhHFJccdOKhRahnz+GB+u/TOedOPmzamoxvm4T+X1IkXhofC1e+5fjT\nxBLcVX1iY39yJ2NGA6MBTjzxxFoNc3J6Uw4cdOaC+CIAL5T+gWG7Z5DV0mAa6LN5ibPUoxPyNLEE\ndx5wQoXbGcDWw+9krZ0GTAPIzs7+SbDH4pFLutfmy0Rq6Dy3BxCpk1gOOT4H2htjMo0xDYFLgAXO\njiUiIkdS7RG3tbbUGHMD8DZQH3jWWvul45OJiEiVYrpCvLV2IbDQ4VlERCQG+nRGRMRnFNwiIj6j\n4BYR8RkFt4iIzyi4RUR8xlhbq65M9Ac1Jh/4Nu4P7LyWwE63h0iwZHzNkJyvW6/Z29pYa9NjuaMj\nwe1Xxpgca22223MkUjK+ZkjO163XHBx6q0RExGcU3CIiPqPgrmya2wO4IBlfMyTn69ZrDgi9xy0i\n4jM64hYR8RkFdxWMMbcYY6wxpqXbsySCMeYhY8xXxpgvjDHzjTHHuD2TU5Jx8bUx5gRjzPvGmLXG\nmC+NMePcnilRjDH1jTG5xpg33J4lnhTchzHGnAD8P2Cz27Mk0DtAF2ttFrAOmOTyPI5I4sXXpcDN\n1tqOwBnA9UnyugHGAWvdHiLeFNw/9WdgAlWsZwsqa+0/rLWl5Tf/RWjLURBFFl9baw8A4cXXgWat\n3WatXV7+872Egux4d6dynjEmAxgIPOP2LPGm4K7AGDME2GKtXen2LC66EnB+26k7qlp8HfgAq8gY\n0xboDnyrIPP9AAABWklEQVTq7iQJ8Qihg7DALbKNaZFCkBhjFgM/q+K37gBuB36V2IkSI9rrtta+\nXn6fOwj9b/WcRM6WQDEtvg4qY0waMBe4yVq7x+15nGSMGQR8b61dZozp5/Y88ZZ0wW2trXJTrDGm\nK5AJrDTGQOjtguXGmF7W2u0JHNERR3rdYcaYK4BBwLk2uOeIxrT4OoiMMQ0IhfYca+08t+dJgD7A\nEGPMBUAqcJQx5nlr7eUuzxUXOo/7CIwxm4Bsa61fLlBTa8aYAcBU4JfW2ny353GKMSaF0Iev5wJb\nCC3CvjToO1RN6EhkFrDLWnuT2/MkWvkR9y3W2kFuzxIveo9bAB4HmgHvGGNWGGOecnsgJ5R/ABte\nfL0WeCXooV2uDzAS6F/+57ui/EhUfEpH3CIiPqMjbhERn1Fwi4j4jIJbRMRnFNwiIj6j4BYR8RkF\nt4iIzyi4RUR8RsEtIuIz/x/He1VtZ3aO/AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x109ce2198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = np.arange(-5,5,0.1)\n",
    "zero = np.zeros(shape=(f.size))\n",
    "lplus = np.max(np.array([f,zero]), axis=0)\n",
    "lminus = np.max(np.array([-f,zero]), axis=0)\n",
    "plt.plot(f,lplus, label='max(0,f(x))')\n",
    "plt.plot(f,lminus, label='max(0,-f(x))')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "More generally, a stochastic gradient descent algorithm uses the following template:\n",
    "```\n",
    "initialize w\n",
    "loop over data and labels (x,y):\n",
    "     compute f(x)\n",
    "     compute loss gradient g = partial_w l(y, f(x))\n",
    "     w = w - eta g\n",
    "```\n",
    "Here the learning rate $\\eta$ may well change as we iterate over the data. Moreover, we may traverse the data in nonlinear order (e.g. we might reshuffle the data), depending on the specific choices of the algorithm. The issue is that as we go over the data, sometimes the gradient might point us into the right direction and sometimes it might not. Intuitively, on average things *should* get better. But to be really sure, there's only one way to find out - we need to prove it. We pick a simple and elegant (albeit a bit restrictive) proof of [Nesterov and Vial](http://dl.acm.org/citation.cfm?id=1377347). \n",
    "\n",
    "The situation we consider are *convex* losses. This is a bit restrictive in the age of deep networks but still quite instructive (in addition to that, nonconvex convergence proofs are a lot messier). For recap - a convex function $f(x)$ satisfies $f(\\lambda x + (1-\\lambda) x') \\leq \\lambda f(x) + (1-\\lambda) f(x')$, that is, the linear interpolant between function values is *larger* than the function values in between. Likewise, a convex set $S$ is a set where for any points $x, x' \\in S$ the line $[x,x']$ is in the set, i.e. $\\lambda x + (1-\\lambda) x' \\in S$ for all $\\lambda \\in [0,1]$. Now assume that $w^*$ is the minimizer of the expected loss that we are trying to minimize, e.g. \n",
    "\n",
    "$$w^* = \\mathrm{argmin}_w R(w) \\text{ where } R(w) = \\frac{1}{m} \\sum_{i=1}^m l(y_i, f(x_i, w))$$\n",
    "\n",
    "Let's assume that we actually *know* that $w^*$ is contained in some set convex set $S$, e.g. a ball of radius $R$ around the origin. This is convenient since we want to make sure that during optimization our parameter $w$ doesn't accidentally diverge. We can ensure that, e.g. by shrinking it back to such a ball whenever needed. \n",
    "\n",
    "Secondly, assume that we have an upper bound on the magnitude of the gradient $g_i := \\partial_w l(y_i, f(x_i, w))$ for all $i$ by some constant $L$ (it's called so since this is often referred to as the Lipschitz constant). Again, this is super useful since we don't want $w$ to diverge while we're optimizing. In practice, many algorithms employ e.g. *gradient clipping* to force our gradients to be well behaved, by shrinking the gradients back to something tractable.\n",
    "\n",
    "Third, to get rid of variance in the parameter $w_t$ that is obtained during the optimization, we use the weighted average over the entire optimization process as our solution, i.e. we use $\\bar{w} := \\sum_t \\eta_t w_t / \\sum_t \\eta_t$. \n",
    "\n",
    "Let's look at the distance $r_t := \\|w_t - w^*\\|$, i.e. the distance between the optimal solution vector $w^*$ and what we currently have. It is bounded as follows:\n",
    "\n",
    "$$\\begin{eqnarray}\n",
    "\\|w_{t+1} - w^*\\|^2 = & \\|w_t - w^*\\|^2 + \\eta_t^2 \\|g_t\\|^2 - 2 \\eta_t g_t^\\top (w_t - w^*) \\\\\n",
    "\\leq & \\|w_t - w^*\\|^2 + \\eta_t^2 L^2 - 2 \\eta_t g_t^\\top (w_t - w^*) \n",
    "\\end{eqnarray}$$\n",
    "\n",
    "Next we use convexity of $R(w)$. We know that $R(w^*) \\geq R(w_t) + \\partial_w R(w_t)^\\top (w^* - w_t)$ and moreover that the average of function values is larger than the function value of the average, i.e. $\\sum_{t=1}^T \\eta_t R(w_t) / \\sum_t \\eta_t \\geq R(\\bar{w})$. The first inequality allows us to bound the expected decrease in distance to optimality via\n",
    "\n",
    "$$\\mathbf{E}[r_{t+1} - r_t] \\leq \\eta_t^2 L^2 - 2 \\eta_t \\mathbf{E}[g_t^\\top (w_t - w^*)] \\leq\n",
    "\\eta_t^2 L^2 - 2 \\eta_t \\mathbf{E}[R[w_t] - R[w^*]]$$\n",
    "\n",
    "Summing over $t$ and using the facts that $r_T \\geq 0$ and that $w$ is contained inside a ball of radius $R$ yields:\n",
    "\n",
    "$$-R^2 \\leq L^2 \\sum_{t=1}^T \\eta_t^2 - 2 \\sum_t \\eta_t \\mathbf{E}[R[w_t] - R[w^*]]$$\n",
    "\n",
    "Rearranging terms, using convexity of $R$ the second time, and dividing by $\\sum_t \\eta_t$ yields a bound on how far we are likely to stray from the best possible solution:\n",
    "\n",
    "$$\\mathbf{E}[R[\\bar{w}]] - R[w^*] \\leq \\frac{R^2 + L^2 \\sum_{t=1}^T \\eta_t^2}{2\\sum_{t=1}^T \\eta_t}$$\n",
    "\n",
    "Depending on how we choose $\\eta_t$ we will get different bounds. For instance, if we make $\\eta$ constant, i.e. if we use a constant learning rate, we get the bounds $(R^2 + L^2 \\eta^2 T)/(2 \\eta T)$. This is minimized for $\\eta = R/L\\sqrt{T}$, yielding a bound of $RL/\\sqrt{T}$. A few things are interesting in this context: \n",
    "\n",
    "* If we are potentially far away from the optimal solution, we should use a large learning rate (the O(R) dependency).\n",
    "* If the gradients are potentially large, we should use a smaller learning rate (the O(1/L) dependency). \n",
    "* If we have a long time to converge, we should use a smaller learning rate, but not too small. \n",
    "* Large gradients and a large degree of uncertainty as to how far we are away from the optimal solution lead to poor convergence. \n",
    "* More optimization steps make things better. \n",
    "\n",
    "None of these insights are terribly surprising, albeit useful to keep in mind when we use SGD in the wild. And this was the very point of going through this somewhat tedious proof. Furthermore, if we use a decreasing learning rate, e.g. $\\eta_t = O(1/\\sqrt{t})$, then our bounds are somewhat less tight, and we get a bound of $O(\\log T / \\sqrt{T})$ bound on how far away from optimality we might be. The key difference is that for the decreasing learning rate we need not know when to stop. In other words, we get an anytime algorithm that provides a good result at any time, albeit not as good as what we could expect if we knew how much time to optimize we have right from the beginning. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Next\n",
    "[Softmax regression from scratch](../chapter02_supervised-learning/softmax-regression-scratch.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "For whinges or inquiries, [open an issue on  GitHub.](https://github.com/zackchase/mxnet-the-straight-dope)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.4.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
